﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShopNet.Model;

namespace ShopNet
{
    public partial class ListaProdutos : System.Web.UI.Page
    {
        private int idSubCategoria;

        #region Propriedades
        public new Shop Master
        {
            get
            {
                return ((Shop)(base.Master));
            }
        }

        public int IdCategoria
        {
            get
            {
                if (ViewState["IdCategoria"] == null) return 0;
                return Convert.ToInt32(ViewState["IdCategoria"]);
            }

            set { ViewState.Add("IdCategoria", value); }
        }

        #endregion

        #region Metodos

        #region CarregarProdutos

        private void CarregarProdutos()
        {
            IQueryable<Produto> lista = NServico.Db.Produtos;
            if (IdCategoria > 0)
            {
                lista = lista.Where(p => p.IdCategoria == IdCategoria);
                lDescricaoCategoria.Text = NServico.Db.Categorias.FirstOrDefault(c => c.IdCategoria == IdCategoria).Descricao;
            }
            Session.Add("lista", lista);

            if (lista.Count().Equals(0))
            {
                Master.ExibirMensagem(Shop.TipoMensagem.Warning, "Nenhum produto encontrado.");
            }
            LoadControlProduto();


        }

        #endregion

        #region LoadControlProduto

        private void LoadControlProduto()
        {
            IQueryable<Produto> lista = (IQueryable<Produto>)Session["lista"];
            if (ddlSubCategoria.SelectedValue!="0")
            {
                lista = lista.Where(p => p.IdSubCategoria == int.Parse(ddlSubCategoria.SelectedValue));
            }
            Master.TotalRegs = lista.Count();
            lista = lista.Pagina(Master.PaginaAtual, Master.TamPagina, p=>p.Nome, true);
            phProdutos.Controls.Clear();
            bool itemImpar = false;
            foreach (Produto prod in lista)
            {
                ControlProduto ctrlProd = (ControlProduto)LoadControl("~/ControlProduto.ascx");
                int idProduto = prod.IdProduto;
                var listaImagens = NServico.Db.Imagems.Where(i => i.IdProduto == idProduto).ToList();
                if (listaImagens.Count > 0)
                {
                    Imagem im = (listaImagens.Where(ii => ii.Principal).Count() > 0)
                                    ? listaImagens.FirstOrDefault(ii => ii.Principal)
                                    : listaImagens[0];

                    ctrlProd.NomeImagem = im.Nome;
                }
                else
                    ctrlProd.NomeImagem = "noproduct.jpg";

                ctrlProd.IdProduto = prod.IdProduto;
                ctrlProd.Nome = prod.Nome;
                ctrlProd.PrecoUnitario = prod.PrecoUnitario.ToString("#,##0.00");
                ctrlProd.PrecoDesconto = prod.PrecoUnitarioDesconto.ToString("#,##0.00");
                ctrlProd.ComDesconto(prod.PrecoPacote != prod.precoDesconto);
                ctrlProd.IsDisponivel = prod.IsDisponivel;
                ctrlProd.ItemImpar = !itemImpar;
                itemImpar = !itemImpar;
                phProdutos.Controls.Add(ctrlProd);
            }

            
            ExibirPaginas();
        }

        #endregion

        #region ExibirPaginas

        private void ExibirPaginas()
        {
            IList<int> lista = new List<int>(Master.TotalPaginas);
            for (int i = 1; i <= Master.TotalPaginas; i++)
                lista.Add(i);
            
            var wrapped = (from index in lista select new { Value = index }).ToArray();
            rPagina.DataSource = wrapped;
            rPagina.DataBind();

            pages_panel.Visible = lista.Count != 0;
        }

        #endregion

        #region CarregarSubCategorias

        private void CarregarSubCategorias()
        {
            if (IdCategoria > 0)
            {
                IList<SubCategoria> lista = Master.Categorias.FirstOrDefault(c => c.IdCategoria == IdCategoria).SubCategorias.ToList();
                ddlSubCategoria.DataSource = lista;
                ddlSubCategoria.DataTextField = "Descricao";
                ddlSubCategoria.DataValueField = "IdSubCategoria";
                ddlSubCategoria.DataBind();
            }
            if (idSubCategoria>0)
            {
                ListItem li = ddlSubCategoria.Items.FindByValue(idSubCategoria.ToString());
                if (li != null) li.Selected = true;
            }
            ddlSubCategoria.Items.Insert(0, new ListItem("Todos", "0"));
        }

        #endregion

        #endregion

        #region Eventos

        #region Page_Load

        protected void Page_Load(object sender, EventArgs e)
        {
            Master.ExibirMensagem(Shop.TipoMensagem.Success, string.Empty);
            Master.PaginaAtual = int.Parse(Request.QueryString["Pagina"] ?? "1");
            if (!string.IsNullOrWhiteSpace(Request.QueryString["IdCategoria"]) &&
                BaseCompareValidator.CanConvert(Request.QueryString["IdCategoria"], ValidationDataType.Integer))
            {
                IdCategoria = Convert.ToInt32(Request.QueryString["IdCategoria"]);
            }

            if (!string.IsNullOrWhiteSpace(Request.QueryString["IdSubCategoria"]) &&
                BaseCompareValidator.CanConvert(Request.QueryString["IdSubCategoria"], ValidationDataType.Integer))
            {
                idSubCategoria = Convert.ToInt32(Request.QueryString["IdSubCategoria"]);
            }

            if (!IsPostBack) CarregarSubCategorias();
            CarregarProdutos();
        }

        #endregion

        #region ddlCategoria_Selected

        protected void ddlCategoria_Selected(object sender, EventArgs e)
        {
            Master.PaginaAtual = 1;
            LoadControlProduto();
        }

        #endregion

        #endregion
        

    }
}